package cn.xy.dao;

import cn.xy.pojo.Teacher;
import org.apache.ibatis.annotations.Param;

public interface TeacherMapper {
    /**
     *  一对多
     *  根据id查询老师的所有信息，以及下面对应的所有学生信息
     *  方式一：按照结果嵌套处理
     *  SQL语句虽然复杂一点，但是结果集映射比较容易理解
     *  SQL语句：select s.id sid,s.name sname,t.id tid,t.name tname from `teacher` t,`student` s where t.id = s.tid and t.id=#{tid};
     *  结果集映射：
     *  <resultMap id="TeacherStudent" type="teacher">
                <result property="id" column="tid"/>
                <result property="name" column="tname"/>
         property:实体类的属性名。ofType：集合中的泛型
             collection property="studentList" ofType="student">
                <result property="id" column="sid"/>
                <result property="name" column="sname"/>
                <result property="tid" column="tid"/>
             </collection>
     </resultMap>
     * @return
     */
    Teacher getTeacherById(@Param("tid") Integer id);

    /**
     *  一对多
     *  根据id查询老师的所有信息，以及下面对应的所有学生信息
     *  方式二：按照查询语句嵌套处理
     *  sql语句简单些，但是结果集映射理解起来难一些
     *  SQL语句：select * from `teacher`;
     *  结果集映射：
     *  <resultMap id="TeacherStudent2" type="teacher">
            <result property="id" column="id"/>
            <result property="name" column="name"/>
            property:实体类的属性名。javaType：指定实体类属性的类型。ofType：泛型中的类型。select：接下来对应关联的SQL语句。column：把老师的id传给下面要执行sql语句中
            <collection property="studentList" javaType="ArrayList" ofType="student" select="getStudent" column="id"/>
     </resultMap>

     <select id="getStudent" resultType="student">
        SELECT * FROM `student` WHERE tid=#{tid};
     </select>
     * @param id
     * @return
     */
    Teacher getTeacherById2(@Param("tid") Integer id);
}
